import axios, { AxiosRequestConfig, AxiosResponse } from 'axios';
import { message } from 'antd';

// 创建axios实例
const request = axios.create({
  baseURL: '',
  timeout: 10000,
  headers: {
    'Content-Type': 'application/json',
  },
});

// 防止重复跳转的标志
let isRedirecting = false;

// 请求拦截器
request.interceptors.request.use(
  (config) => {
    // 调试日志：记录请求URL
    console.log('🚀 Request URL:', config.url);
    console.log('🚀 Full URL:', config.baseURL + config.url);
    
    // 添加token
    const token = localStorage.getItem('token');
    if (token) {
      config.headers.Authorization = `Bearer ${token}`;
    }
    return config;
  },
  (error) => {
    return Promise.reject(error);
  }
);

// 响应拦截器
request.interceptors.response.use(
  (response: AxiosResponse) => {
    // 调试日志：记录响应信息
    console.log('📥 Response Status:', response.status);
    console.log('📥 Response URL:', response.config.url);
    console.log('📥 Response Headers:', response.headers);
    
    const { data } = response;
    
    // 如果是文件下载，直接返回
    if (response.config.responseType === 'blob') {
      return response;
    }
    
    // 统一处理API响应
    if (data.code === 200) {
      return data.data;
    } else {
      message.error(data.message || '请求失败');
      return Promise.reject(new Error(data.message || '请求失败'));
    }
  },
  (error) => {
    // 调试日志：记录错误信息
    console.error('❌ Request Error:', error);
    if (error.response) {
      console.error('❌ Error Status:', error.response.status);
      console.error('❌ Error URL:', error.response.config?.url);
      console.error('❌ Error Headers:', error.response.headers);
    }
    
    // 处理HTTP错误
    if (error.response) {
      const { status, data } = error.response;
      
      switch (status) {
        case 401:
          // 防止重复跳转和在登录页面时跳转
          if (!isRedirecting && window.location.pathname !== '/login') {
            isRedirecting = true;
            message.error('登录已过期，请重新登录');
            localStorage.removeItem('token');
            
            // 延迟跳转，避免立即跳转导致的问题
            setTimeout(() => {
              window.location.href = '/login';
              isRedirecting = false;
            }, 100);
          }
          break;
        case 403:
          message.error('没有权限访问');
          break;
        case 404:
          message.error('请求的资源不存在');
          break;
        case 429:
          message.error('请求过于频繁，请稍后再试');
          break;
        case 500:
          message.error('服务器内部错误');
          break;
        default:
          message.error(data?.message || '请求失败');
      }
    } else if (error.request) {
      message.error('网络连接失败，请检查网络');
    } else {
      message.error('请求配置错误');
    }
    
    return Promise.reject(error);
  }
);

export { request };
export default request;